package com.sau.pixelcart.common.result;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Accessors(chain = true)
@Data
public class Result implements Serializable {

    private Integer code;
    private String message;
    private Object data;

    /**
     * 成功响应 200
     * @return
     */
    public static Result success(){
        return new Result().setCode(200).setMessage("操作成功");
    }

    /**
     * 成功相应 携带数据 200
     * @return
     */
    public static Result success(Object data){
        return new Result().setCode(200).setMessage("操作成功").setData(data);
    }

    /**
     * 成功相应 携带数据和提示信息 200
     * @return
     */
    public static Result success(Object data, String message){
        return new Result().setCode(200).setMessage(message).setData(data);
    }

    public static Result ok(String message){
        return new Result().setCode(200).setMessage(message);
    }

    /**
     * 请求参数错误（400）
     * @param message 错误描述
     */
    public static Result badRequest(String message) {
        return new Result().setCode(400).setMessage(message);
    }

    /**
     * 未授权访问 401
     * @return
     */
    public static Result unauthorized(){
        return new Result().setCode(401).setMessage("身份验证失败");
    }

    /**
     * 未授权访问 401
     * @return
     */
    public static Result unauthorized(String message){
        return new Result().setCode(401).setMessage(message);
    }

    /**
     * 无权限访问 403
     * @return
     */
    public static Result forbidden() {
        return new Result().setCode(403).setMessage("无访问权限");
    }

    /**
     * 服务器错误 500
     * @return
     */
    public static Result error(String message){
        return new Result().setCode(500).setMessage(message);
    }

    /**
     * 服务不可用 503
     * @param message 维护提示信息
     */
    public static Result serviceUnavailable(String message) {
        return new Result().setCode(503).setMessage("服务不可用，请联系管理员: " + message);
    }

}
